package JavaCode.binary_search.more_practices;

public class FindMin {


    public static void main(String[] args) {
        int[] t={3,1};
        System.out.println(new FindMin().findMin(t));
    }

    public int findMin(int[] nums) {
        int left=0;
        int right=nums.length-1;
        if(nums[left]<nums[right]) return nums[left];

        while (left<right)
        {
            int mid=left+(right-left)/2;

            if(nums[mid]>nums[right])
            {
                left=mid+1;
            }
            else if(nums[mid]<nums[left])
            {
                right=mid;
            }
            else
            {
                right--;
            }
        }
        return nums[left];
    }
}
/**
 * https://leetcode-cn.com/explore/learn/card/binary-search/214/more-practices/854/
 * 寻找旋转排序数组中的最小值 II
 * 假设按照升序排序的数组在预先未知的某个点上进行了旋转。
 *
 * ( 例如，数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
 *
 * 请找出其中最小的元素。
 *
 * 注意数组中可能存在重复的元素。
 *
 * 示例 1：
 *
 * 输入: [1,3,5]
 * 输出: 1
 * 示例 2：
 *
 * 输入: [2,2,2,0,1]
 * 输出: 0
 * 说明：
 *
 * 这道题是 寻找旋转排序数组中的最小值 的延伸题目。
 * 允许重复会影响算法的时间复杂度吗？会如何影响，为什么？
 */
